#pragma once
#include "VectorXYZ.h"
#include <vector>

#ifndef MOUSESTATE
#define MOUSESTATE

struct MouseState {
public:
	/* Constructor / Deconstructor */
	MouseState();

	/* Functions */
	void SetPosition (int newX, int newY);
	
	VectorXYZ Direction ();
	VectorXYZ Difference ();

	/* Data Members */
	// Mouse Button states
	bool isLeftDown;
	bool isRightDown;
	bool isMiddleDown;
	int scroll_delta;

	// Mouse position
	VectorXYZ position;
	VectorXYZ previous_position;
};

#endif

#ifndef KEYBOARDSTATE
#define KEYBOARDSTATE

struct KeyboardState {
public:
	/* Functions */
	bool isKeyDown (unsigned int Key) const;

	void AddKey (unsigned int Key);
	void AddKey (char Key);

	void RemoveKey (unsigned int Key);
	void RemoveKey (char Key);

	/* Data Members */
	// List of Pressed Keys
	std::vector <unsigned int> active_keys;
};

#endif

/* Declaring Global Variables */
extern KeyboardState Keyboard;
extern MouseState Mouse;